Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

feature/node/src/main/kotlin/org/meshtastic/feature/node/metrics/PositionLog.kt 92deae785e3ef853f6758a8e550dcc163262914e (92deae78) Text, 10.77 KB

T8b949e/*
* Copyright (c) 2025 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/

Tff7b72package T7ee787org.meshtastic.feature.node.metrics

Tff7b72import T7ee787android.app.Activity
Tff7b72import T7ee787android.content.Intent
Tff7b72import T7ee787androidx.activity.compose.rememberLauncherForActivityResult
Tff7b72import T7ee787androidx.activity.result.contract.ActivityResultContracts
Tff7b72import T7ee787androidx.compose.foundation.layout.Arrangement
Tff7b72import T7ee787androidx.compose.foundation.layout.BoxWithConstraints
Tff7b72import T7ee787androidx.compose.foundation.layout.Column
Tff7b72import T7ee787androidx.compose.foundation.layout.ColumnScope
Tff7b72import T7ee787androidx.compose.foundation.layout.FlowRow
Tff7b72import T7ee787androidx.compose.foundation.layout.Row
Tff7b72import T7ee787androidx.compose.foundation.layout.RowScope
Tff7b72import T7ee787androidx.compose.foundation.layout.Spacer
Tff7b72import T7ee787androidx.compose.foundation.layout.fillMaxSize
Tff7b72import T7ee787androidx.compose.foundation.layout.fillMaxWidth
Tff7b72import T7ee787androidx.compose.foundation.layout.padding
Tff7b72import T7ee787androidx.compose.foundation.layout.width
Tff7b72import T7ee787androidx.compose.foundation.lazy.LazyColumn
Tff7b72import T7ee787androidx.compose.foundation.lazy.items
Tff7b72import T7ee787androidx.compose.material.icons.Icons
Tff7b72import T7ee787androidx.compose.material.icons.filled.Delete
Tff7b72import T7ee787androidx.compose.material.icons.filled.Save
Tff7b72import T7ee787androidx.compose.material3.ButtonDefaults
Tff7b72import T7ee787androidx.compose.material3.Icon
Tff7b72import T7ee787androidx.compose.material3.LocalTextStyle
Tff7b72import T7ee787androidx.compose.material3.MaterialTheme
Tff7b72import T7ee787androidx.compose.material3.OutlinedButton
Tff7b72import T7ee787androidx.compose.material3.Scaffold
Tff7b72import T7ee787androidx.compose.material3.Text
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.CompositionLocalProvider
Tff7b72import T7ee787androidx.compose.runtime.getValue
Tff7b72import T7ee787androidx.compose.runtime.mutableStateOf
Tff7b72import T7ee787androidx.compose.runtime.remember
Tff7b72import T7ee787androidx.compose.runtime.saveable.rememberSaveable
Tff7b72import T7ee787androidx.compose.runtime.setValue
Tff7b72import T7ee787androidx.compose.ui.Alignment
Tff7b72import T7ee787androidx.compose.ui.Modifier
Tff7b72import T7ee787androidx.compose.ui.text.style.TextAlign
Tff7b72import T7ee787androidx.compose.ui.text.style.TextOverflow
Tff7b72import T7ee787androidx.compose.ui.tooling.preview.Preview
Tff7b72import T7ee787androidx.compose.ui.tooling.preview.PreviewScreenSizes
Tff7b72import T7ee787androidx.compose.ui.unit.dp
Tff7b72import T7ee787androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
Tff7b72import T7ee787androidx.lifecycle.compose.collectAsStateWithLifecycle
Tff7b72import T7ee787org.jetbrains.compose.resources.stringResource
Tff7b72import T7ee787org.meshtastic.core.model.util.metersIn
Tff7b72import T7ee787org.meshtastic.core.model.util.toString
Tff7b72import T7ee787org.meshtastic.core.strings.Res
Tff7b72import T7ee787org.meshtastic.core.strings.alt
Tff7b72import T7ee787org.meshtastic.core.strings.clear
Tff7b72import T7ee787org.meshtastic.core.strings.heading
Tff7b72import T7ee787org.meshtastic.core.strings.latitude
Tff7b72import T7ee787org.meshtastic.core.strings.longitude
Tff7b72import T7ee787org.meshtastic.core.strings.sats
Tff7b72import T7ee787org.meshtastic.core.strings.save
Tff7b72import T7ee787org.meshtastic.core.strings.speed
Tff7b72import T7ee787org.meshtastic.core.strings.timestamp
Tff7b72import T7ee787org.meshtastic.core.ui.component.MainAppBar
Tff7b72import T7ee787org.meshtastic.core.ui.theme.AppTheme
Tff7b72import T7ee787org.meshtastic.core.ui.util.formatPositionTime
Tff7b72import T7ee787org.meshtastic.proto.ConfigProtos.Config.DisplayConfig.DisplayUnits
Tff7b72import T7ee787org.meshtastic.proto.MeshProtos
Tff7b72import T7ee787java.text.DateFormat

Tf0883e@Composable
Tff7b72private Tff7b72fun Te6edf3RowScopeTb4b4b4.Td2a8ffPositionTextTb4b4b4(Te6edf3textTb4b4b4: Tffa657StringTb4b4b4, Te6edf3weightTb4b4b4: Tffa657FloatTb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3textTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(Te6edf3weightTb4b4b4)Tb4b4b4,
Te6edf3textAlign Tff7b72= Te6edf3TextAlignTb4b4b4.Te6edf3CenterTb4b4b4,
Te6edf3overflow Tff7b72= Te6edf3TextOverflowTb4b4b4.Te6edf3EllipsisTb4b4b4,
Te6edf3maxLines Tff7b72= T79c0ff1Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72const Tff7b72val Te6edf3WEIGHT_10 Tff7b72= Tb4b4b4.T79c0ff1T79c0ff0f
Tff7b72private Tff7b72const Tff7b72val Te6edf3WEIGHT_15 Tff7b72= Tb4b4b4.T79c0ff1T79c0ff5f
Tff7b72private Tff7b72const Tff7b72val Te6edf3WEIGHT_20 Tff7b72= Tb4b4b4.T79c0ff2T79c0ff0f
Tff7b72private Tff7b72const Tff7b72val Te6edf3WEIGHT_40 Tff7b72= Tb4b4b4.T79c0ff4T79c0ff0f

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffHeaderItemTb4b4b4(Te6edf3compactWidthTb4b4b4: Tffa657BooleanTb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4, Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4) Tb4b4b4{
Te6edf3PositionTextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3latitudeTb4b4b4)Tb4b4b4, Te6edf3WEIGHT_20Tb4b4b4)
Te6edf3PositionTextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3longitudeTb4b4b4)Tb4b4b4, Te6edf3WEIGHT_20Tb4b4b4)
Te6edf3PositionTextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3satsTb4b4b4)Tb4b4b4, Te6edf3WEIGHT_10Tb4b4b4)
Te6edf3PositionTextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3altTb4b4b4)Tb4b4b4, Te6edf3WEIGHT_15Tb4b4b4)
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3compactWidthTb4b4b4) Tb4b4b4{
Te6edf3PositionTextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3speedTb4b4b4)Tb4b4b4, Te6edf3WEIGHT_15Tb4b4b4)
Te6edf3PositionTextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3headingTb4b4b4)Tb4b4b4, Te6edf3WEIGHT_15Tb4b4b4)
Tb4b4b4}
Te6edf3PositionTextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3timestampTb4b4b4)Tb4b4b4, Te6edf3WEIGHT_40Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tff7b72const Tff7b72val Te6edf3DEG_D Tff7b72= T79c0ff1e-7
Tff7b72const Tff7b72val Te6edf3HEADING_DEG Tff7b72= T79c0ff1e-5

Tf0883e@Composable
Tff7b72fun Td2a8ffPositionItemTb4b4b4(Te6edf3compactWidthTb4b4b4: Tffa657BooleanTb4b4b4, Te6edf3positionTb4b4b4: Te6edf3MeshProtosTb4b4b4.Te6edf3PositionTb4b4b4, Te6edf3dateFormatTb4b4b4: Te6edf3DateFormatTb4b4b4, Te6edf3systemTb4b4b4: Te6edf3DisplayUnitsTb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3SpaceBetweenTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3PositionTextTb4b4b4(Ta5d6ff"Ta5d6ff%.5fTa5d6ff"Tb4b4b4.Te6edf3formatTb4b4b4(Te6edf3positionTb4b4b4.Te6edf3latitudeI Tff7b72* Te6edf3DEG_DTb4b4b4)Tb4b4b4, Te6edf3WEIGHT_20Tb4b4b4)
Te6edf3PositionTextTb4b4b4(Ta5d6ff"Ta5d6ff%.5fTa5d6ff"Tb4b4b4.Te6edf3formatTb4b4b4(Te6edf3positionTb4b4b4.Te6edf3longitudeI Tff7b72* Te6edf3DEG_DTb4b4b4)Tb4b4b4, Te6edf3WEIGHT_20Tb4b4b4)
Te6edf3PositionTextTb4b4b4(Te6edf3positionTb4b4b4.Te6edf3satsInViewTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3WEIGHT_10Tb4b4b4)
Te6edf3PositionTextTb4b4b4(Te6edf3positionTb4b4b4.Te6edf3altitudeTb4b4b4.Te6edf3metersInTb4b4b4(Te6edf3systemTb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(Te6edf3systemTb4b4b4)Tb4b4b4, Te6edf3WEIGHT_15Tb4b4b4)
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3compactWidthTb4b4b4) Tb4b4b4{
Te6edf3PositionTextTb4b4b4(Ta5d6ff"Tffd700${Te6edf3positionTb4b4b4.Te6edf3groundSpeedTffd700}Ta5d6ff Km/hTa5d6ff"Tb4b4b4, Te6edf3WEIGHT_15Tb4b4b4)
Te6edf3PositionTextTb4b4b4(Ta5d6ff"Ta5d6ff%.0f°Ta5d6ff"Tb4b4b4.Te6edf3formatTb4b4b4(Te6edf3positionTb4b4b4.Te6edf3groundTrack Tff7b72* Te6edf3HEADING_DEGTb4b4b4)Tb4b4b4, Te6edf3WEIGHT_15Tb4b4b4)
Tb4b4b4}
Te6edf3PositionTextTb4b4b4(Te6edf3positionTb4b4b4.Te6edf3formatPositionTimeTb4b4b4(Te6edf3dateFormatTb4b4b4)Tb4b4b4, Te6edf3WEIGHT_40Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffActionButtonsTb4b4b4(
Te6edf3clearButtonEnabledTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onClearTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3saveButtonEnabledTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onSaveTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3FlowRowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff2T79c0ff4.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3verticalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3OutlinedButtonTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4,
Te6edf3onClick Tff7b72= Te6edf3onClearTb4b4b4,
Te6edf3enabled Tff7b72= Te6edf3clearButtonEnabledTb4b4b4,
Te6edf3colors Tff7b72= Te6edf3ButtonDefaultsTb4b4b4.Te6edf3outlinedButtonColorsTb4b4b4(Te6edf3contentColor Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3errorTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3IconsTb4b4b4.Te6edf3DefaultTb4b4b4.Te6edf3DeleteTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3clearTb4b4b4)Tb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3widthTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3clearTb4b4b4)Tb4b4b4)
Tb4b4b4}

Te6edf3OutlinedButtonTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4, Te6edf3onClick Tff7b72= Te6edf3onSaveTb4b4b4, Te6edf3enabled Tff7b72= Te6edf3saveButtonEnabledTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3IconsTb4b4b4.Te6edf3DefaultTb4b4b4.Te6edf3SaveTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3saveTb4b4b4)Tb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3widthTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3saveTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72fun Td2a8ffPositionLogScreenTb4b4b4(Te6edf3viewModelTb4b4b4: Te6edf3MetricsViewModel Tff7b72= Te6edf3hiltViewModelTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3onNavigateUpTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3state Tff7b72by Te6edf3viewModelTb4b4b4.Te6edf3stateTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)

Tff7b72val Te6edf3exportPositionLauncher Tff7b72=
Te6edf3rememberLauncherForActivityResultTb4b4b4(Te6edf3ActivityResultContractsTb4b4b4.Te6edf3StartActivityForResultTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tffa657itTb4b4b4.Te6edf3resultCode Tff7b72=Tff7b72= Te6edf3ActivityTb4b4b4.Te6edf3RESULT_OKTb4b4b4) Tb4b4b4{
Tffa657itTb4b4b4.Te6edf3dataTff7b72?.Te6edf3dataTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3uri Tff7b72-Tff7b72> Te6edf3viewModelTb4b4b4.Te6edf3savePositionCSVTb4b4b4(Te6edf3uriTb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72var Te6edf3clearButtonEnabled Tff7b72by Te6edf3rememberSaveableTb4b4b4(Te6edf3stateTb4b4b4.Te6edf3positionLogsTb4b4b4) Tb4b4b4{ Te6edf3mutableStateOfTb4b4b4(Te6edf3stateTb4b4b4.Te6edf3positionLogsTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}

Te6edf3ScaffoldTb4b4b4(
Te6edf3topBar Tff7b72= Tb4b4b4{
Te6edf3MainAppBarTb4b4b4(
Te6edf3title Tff7b72= Te6edf3stateTb4b4b4.Te6edf3nodeTff7b72?.Te6edf3userTff7b72?.Te6edf3longName Tff7b72?: Ta5d6ff"Ta5d6ff"Tb4b4b4,
Te6edf3ourNode Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3showNodeChip Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3canNavigateUp Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3onNavigateUp Tff7b72= Te6edf3onNavigateUpTb4b4b4,
Te6edf3actions Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onClickChip Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tb4b4b4{ Te6edf3innerPadding Tff7b72-Tff7b72>
Te6edf3BoxWithConstraintsTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3innerPaddingTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3compactWidth Tff7b72= Te6edf3maxWidth Tff7b72< T79c0ff6T79c0ff0T79c0ff0.Te6edf3dp
Te6edf3Column Tb4b4b4{
Tff7b72val Te6edf3textStyle Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3compactWidthTb4b4b4) Tb4b4b4{
Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmall
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3LocalTextStyleTb4b4b4.Te6edf3current
Tb4b4b4}
Te6edf3CompositionLocalProviderTb4b4b4(Te6edf3LocalTextStyle Te6edf3provides Te6edf3textStyleTb4b4b4) Tb4b4b4{
Te6edf3HeaderItemTb4b4b4(Te6edf3compactWidthTb4b4b4)
Te6edf3PositionListTb4b4b4(Te6edf3compactWidthTb4b4b4, Te6edf3stateTb4b4b4.Te6edf3positionLogsTb4b4b4, Te6edf3stateTb4b4b4.Te6edf3displayUnitsTb4b4b4)
Tb4b4b4}

Te6edf3ActionButtonsTb4b4b4(
Te6edf3clearButtonEnabled Tff7b72= Te6edf3clearButtonEnabledTb4b4b4,
Te6edf3onClear Tff7b72= Tb4b4b4{
Te6edf3clearButtonEnabled Tff7b72= Tff7b72false
Te6edf3viewModelTb4b4b4.Te6edf3clearPositionTb4b4b4(Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3saveButtonEnabled Tff7b72= Te6edf3stateTb4b4b4.Te6edf3hasPositionLogsTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3onSave Tff7b72= Tb4b4b4{
Tff7b72val Te6edf3intent Tff7b72=
Te6edf3IntentTb4b4b4(Te6edf3IntentTb4b4b4.Te6edf3ACTION_CREATE_DOCUMENTTb4b4b4)Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3addCategoryTb4b4b4(Te6edf3IntentTb4b4b4.Te6edf3CATEGORY_OPENABLETb4b4b4)
Te6edf3type Tff7b72= Ta5d6ff"Ta5d6ffapplication/*Ta5d6ff"
Te6edf3putExtraTb4b4b4(Te6edf3IntentTb4b4b4.Te6edf3EXTRA_TITLETb4b4b4, Ta5d6ff"Ta5d6ffposition.csvTa5d6ff"Tb4b4b4)
Tb4b4b4}
Te6edf3exportPositionLauncherTb4b4b4.Te6edf3launchTb4b4b4(Te6edf3intentTb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72private Tff7b72fun Te6edf3ColumnScopeTb4b4b4.Td2a8ffPositionListTb4b4b4(
Te6edf3compactWidthTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3positionsTb4b4b4: Te6edf3ListTff7b72<Te6edf3MeshProtosTb4b4b4.Te6edf3PositionTff7b72>Tb4b4b4,
Te6edf3displayUnitsTb4b4b4: Te6edf3DisplayUnitsTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3dateFormat Tff7b72= Te6edf3remember Tb4b4b4{ Te6edf3DateFormatTb4b4b4.Te6edf3getDateTimeInstanceTb4b4b4(Te6edf3DateFormatTb4b4b4.Te6edf3SHORTTb4b4b4, Te6edf3DateFormatTb4b4b4.Te6edf3MEDIUMTb4b4b4) Tb4b4b4}

Te6edf3LazyColumnTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4, Te6edf3horizontalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterHorizontallyTb4b4b4) Tb4b4b4{
Te6edf3itemsTb4b4b4(Te6edf3positionsTb4b4b4) Tb4b4b4{ Te6edf3position Tff7b72-Tff7b72> Te6edf3PositionItemTb4b4b4(Te6edf3compactWidthTb4b4b4, Te6edf3positionTb4b4b4, Te6edf3dateFormatTb4b4b4, Te6edf3displayUnitsTb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3testPosition Tff7b72=
Te6edf3MeshProtosTb4b4b4.Te6edf3PositionTb4b4b4.Te6edf3newBuilderTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3latitudeI Tff7b72= T79c0ff2T79c0ff9T79c0ff7T79c0ff6T79c0ff0T79c0ff4T79c0ff2T79c0ff7T79c0ff0
Te6edf3longitudeI Tff7b72= Tff7b72-T79c0ff9T79c0ff5T79c0ff3T79c0ff6T79c0ff9T79c0ff8T79c0ff0T79c0ff4T79c0ff0
Te6edf3altitude Tff7b72= T79c0ff1T79c0ff2T79c0ff3T79c0ff0
Te6edf3satsInView Tff7b72= T79c0ff7
Te6edf3time Tff7b72= Tb4b4b4(Te6edf3SystemTb4b4b4.Te6edf3currentTimeMillisTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1T79c0ff0T79c0ff0T79c0ff0Tb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)

Tf0883e@PreviewTb4b4b4(Te6edf3showBackground Tff7b72= Tff7b72trueTb4b4b4)
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffPositionItemPreviewTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3AppTheme Tb4b4b4{
Te6edf3PositionItemTb4b4b4(
Te6edf3compactWidth Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3position Tff7b72= Te6edf3testPositionTb4b4b4,
Te6edf3dateFormat Tff7b72= Te6edf3DateFormatTb4b4b4.Te6edf3getDateTimeInstanceTb4b4b4(Te6edf3DateFormatTb4b4b4.Te6edf3SHORTTb4b4b4, Te6edf3DateFormatTb4b4b4.Te6edf3MEDIUMTb4b4b4)Tb4b4b4,
Te6edf3system Tff7b72= Te6edf3DisplayUnitsTb4b4b4.Te6edf3METRICTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Tf0883e@PreviewScreenSizes
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffActionButtonsPreviewTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3AppTheme Tb4b4b4{
Te6edf3ColumnTb4b4b4(Te6edf3ModifierTb4b4b4.Te6edf3fillMaxSizeTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3ArrangementTb4b4b4.Te6edf3BottomTb4b4b4) Tb4b4b4{
Te6edf3ActionButtonsTb4b4b4(Te6edf3clearButtonEnabled Tff7b72= Tff7b72trueTb4b4b4, Te6edf3onClear Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4, Te6edf3saveButtonEnabled Tff7b72= Tff7b72trueTb4b4b4, Te6edf3onSave Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.08s